//package internal

package internal

import (
	"github.com/name5566/leaf/gate"
	"github.com/name5566/leaf/log"
	"reflect"
	"server/msg"
)




func init() {
	// 向当前模块（game 模块）注册 Hello 消息的消息处理函数 handleHello
	handler(&msg.MsgHello{}, handleHello)
	handler(&msg.ClientLogin{}, handleLogin)
	handler(&msg.ClientFullRows{}, handFullRows)
}

func handler(m interface{}, h interface{}) {
	skeleton.RegisterChanRPC(reflect.TypeOf(m), h)
}

func handleHello(args []interface{}) {
	// 收到的 Hello 消息
	m := args[0].(*msg.MsgHello)
	// 消息的发送者
	a := args[1].(gate.Agent)

	// 输出收到的消息的内容
	log.Debug("hello %v", m.Name)

	// 给发送者回应一个 Hello 消息
	a.WriteMsg(&msg.MsgHello{
		Name: "client",
	})
}

func handleLogin(args []interface{}) {
	// 收到的 Hello 消息
	m := args[0].(*msg.ClientLogin)
	// 消息的发送者
	a := args[1].(gate.Agent)

	// 输出收到的消息的内容
	log.Debug("login %v,%v", m.Username, m.Password)

	var player = GetPlayer(m.Username)
	if player == nil {
		player = AddPlayer(m.Username, m.Password, a)
	} else {
		player.Agent = a
	}

	// 给发送者回应一个 Hello 消息
	a.WriteMsg(&msg.ServerLogin{
		Username: m.Username,
		Password:m.Password,
		Id:player.Id,
	})
}

func handFullRows(args []interface{}) {
	// 收到的 Hello 消息
	m := args[0].(*msg.ClientFullRows)
	// 消息的发送者
	a := args[1].(gate.Agent)

	var player = GetPlayerByAgent(a)
	if player == nil {
		log.Error("handFullRows player not found.")
		return
	}

	Broadcast(&msg.ServerFullRows{
		Id: m.Id,
		Row:m.Row,
	})

}

